package com.ecode.ecny.flow;

import com.ecode.ecny.base.RspHead;
import com.ecode.ecny.base.RspBody;
import com.ecode.ecny.dto.BaseReqDTO;
import com.ecode.ecny.dto.BaseRspDTO;
import lombok.Data;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @ClassName FlowContent
 * @Author mjlft
 * @Date 2021/8/14 14:18
 * @Version 1.0
 * @Description 流程上下文
 */
@Data
public class FlowContent implements Serializable {
    private String srcSeqNo;
    private String seqNo;
    private BaseReqDTO<?> reqDTO;
    private BaseRspDTO<?> rspDTO;
    public Map<String, Object> tmpMap;

    /**
     * 构建上下文实例
     * @param reqDTO
     * @return
     */
    public static FlowContent createInstance(BaseReqDTO<?> reqDTO) {
        FlowContent flowContent = new FlowContent();
        flowContent.setSeqNo(reqDTO.getHead().getReqNo());
        flowContent.setReqDTO(reqDTO);
        flowContent.setTmpMap(new HashMap<>(8));
        return flowContent;
    }

    public void instanceRsp(RspBody body, RspHead head){
        BaseRspDTO baseRspDTO = new BaseRspDTO();
        baseRspDTO.setBody(body);
        baseRspDTO.setHead(head);

        this.setRspDTO(baseRspDTO);
    }

    public void putKey(String key, Object obj){
        if(tmpMap == null){
            tmpMap = new HashMap<>(8);
        }
        tmpMap.put(key, obj);
    }

    public Object getValue(String key){
        if(tmpMap == null){
            return null;
        }
        Object o = tmpMap.get(key);
        return o;
    }
}
